package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	s := "Yes巴拉巴拉巴!"
	// 各个字符对应的 Unicode 码
	// 59 65 73 5DF4 62C9 5DF4 62C9 5DF4

	// fmt.Println(len(s))
	// fmt.Println(len([]rune(s)))

	fmt.Println([]byte(s))

	for _, rune_ := range s {
		fmt.Println(rune_)
	}

	// fmt.Println("")
	// // 对 s string 进行了 utf-8 的解码
	// // 然后会转成 Unicode
	// // 给了 char 一个 4字节 的 rune
	// for i, char := range s { // char is rune = int32
	// 	fmt.Printf("(%d %X) ", i, char)
	// }
	// fmt.Println()
	// fmt.Println("Rune Count:", utf8.RuneCountInString(s))
	bytes := []byte(s)
	for len(bytes) > 0 {
		ch, size := utf8.DecodeRune(bytes)
		bytes = bytes[size:]
		fmt.Printf("%c ", ch)
	}
	// fmt.Println()

	// for i, ch := range []rune(s) {
	// 	fmt.Printf("(%d %c) ", i, ch)
	// }

	// 使用 range 遍历 字符串，字符的 i (索引) 可能是不连续的（中文）
	// 出现中文 i 会 +3
	// len(string) 获取的是 字节数 ， 获取字符个数 使用 utf8.RuneCountInString()
	// []byte 获得字符串中 字符对应的所有字节

	// 其他 string 操作
	// strings.Fields() // string 空格 分割
	// strings.Split()
	// strings.Join()

	// strings.Contains()
	// strings.Index()

	// strings.ToLower()
	// strings.toUpper()

	// strings.Trim()
	// strings.TrimRight()
	// strings.TrimLeft()
}
